mergeInto(LibraryManager.library, {
    Web_Init: function () {
        if (!Module.common) {
            Module.common = {
                _copyTextToClipboard: function (text) {
                    try {
                        // 创建临时文本域
                        const textArea = document.createElement("textarea");
                        textArea.value = text;
                        textArea.style.position = "fixed";
                        textArea.style.left = "-999999px";
                        textArea.style.top = "-999999px";
                        document.body.appendChild(textArea);
                        
                        // 选择并复制
                        textArea.focus();
                        textArea.select();
                        
                        const successful = document.execCommand('copy');
                        document.body.removeChild(textArea);
                        
                        if (successful) {
                            console.log('降级方案复制成功: ' + text);
                        } else {
                            console.error('降级方案复制失败');
                        }
                    } catch (err) {
                        console.error('降级方案复制出错: ', err);
                    }
                },
                
                _callback: function (signature, callbackFunction, args) {
                    try {
                        // 优先级1: Module.dynCall  
                        if (typeof Module !== 'undefined' && typeof Module.dynCall === 'function') {
                            Module.dynCall(signature, callbackFunction, args);
                            return;
                        }
                        
                        // 优先级2: wasmTable（最可靠）
                        if (typeof wasmTable !== 'undefined') {
                            var func = wasmTable.get(callbackFunction);
                            if (typeof func === 'function') {
                                func.apply(null, args);
                                return;
                            }
                        }
                        
                        // 优先级3: Module.asm
                        if (typeof Module !== 'undefined' && Module.asm) {
                            var dynCallFunc = Module.asm['dynCall_' + signature];
                            if (typeof dynCallFunc === 'function') {
                                // 构建参数数组：回调函数指针 + 额外参数
                                var allArgs = [callbackFunction].concat(args);
                                dynCallFunc.apply(null, allArgs);
                                return;
                            }
                        }
                        
                        console.error('All callback methods failed for signature:', signature);
                        
                    } catch (e) {
                        console.error('_safeCallback error:', e);
                    }
                }
            }
        }
    },

    Web_Copy: function (content) {
        try {
            const text = UTF8ToString(content);
            if (navigator.clipboard && navigator.clipboard.writeText) {
                navigator.clipboard.writeText(text).then(function() {
                    console.log('复制成功: ' + text);
                }).catch(function(err) {
                    console.error('Clipboard API 复制失败: ', err);
                    // 降级方案
                    Module.common._copyTextToClipboard(text);
                });
            } else {
                // 降级方案
                Module.common._copyTextToClipboard(text);
            }
        } catch (error) {
            console.error('复制到剪贴板失败: ', error);
        }
    },
    
    Web_GetPaste: async function (callback) {
        if (navigator.clipboard && navigator.clipboard.readText) {
            navigator.clipboard.readText().then(function(text) {
                console.log('读取剪贴板内容: ', text);
                if (callback) {
                    var length = lengthBytesUTF8(text) + 1;
                    var buffer = _malloc(length);
                    stringToUTF8(text, buffer, length);
                    Module.common._callback('vi', callback, [buffer]);
                    _free(buffer);
                }
            }).catch(function(err) {
                console.error('读取系统剪贴板失败(必须通过用户点击操作才能读取剪贴板): ', err);
                if (callback) {
                    var buffer = _malloc(1);
                    stringToUTF8('', buffer, 1);
                    Module.common._callback('vi', callback, [buffer]);
                    _free(buffer);
                }
            });
        } else {
            console.warn('浏览器不支持 Clipboard API 读取');
            if (callback) {
                var buffer = _malloc(1);
                stringToUTF8('', buffer, 1);
                Module.common._callback('vi', callback, [buffer]);
                _free(buffer);
            }
        }
    },
});